<?php

/**
*  Noch ausbaufähig!
*  Basiert auf dem  Template Engine von: http://www.peuss.com/PHP/Template
*/

class Template {
	var $vorlage;
	
	// Sprache setzten
	function setLang() {
		global $language;
		if (count($language)>0) {
			foreach ($language as $word=> $substitution) {
				$this->setOne($word, $substitution);	
			}
		} else die("Sprache noch nicht definiert");
	}

	// Template setzten
	function Template($vorlage) {
		global $language;
		global $design;
		
		$template = "";
		if (preg_match('/.*front_.*/Uis', $vorlage)) {
			$template = $vorlage;
			$template = preg_replace("/.*templates\/(.*?).tpl/si","\\1.tpl", $template);
			$newUrl = newsOrdner."designs/$design/templates/$template";
			if (file_exists($newUrl)) $vorlage = $newUrl;
		}
		
		$this->setVorlage($vorlage);
		$this->setLang($language);
	}

	/**
	*
	* Entscheidet, ob der Übergebene String ein URL ist und bindet die richtige Vorlage ein.
	* @param String $vorlage URL zur Vorlage-Datei oder die Vorlage als String
	* @access private
	*
	*/
	
	function setVorlage($vorlage) {
		if(file_exists($vorlage)) {
			$fp = fopen($vorlage, "r");
			$text = utf8_decode(fread($fp, filesize($vorlage)));
			fclose($fp);
			$this->vorlage = $text;
		} else {
			$this->vorlage = $vorlage;
		}	
	}
	
	/**
	*
	* Mögliche Aufrufe:
	* - String/String => suchWort, substitution
	* - Array/ - => Array(suchWort => substitution)
	* - String/Array => SchleifenName/2D-Array
	* @internal Überladung simulieren: diese Methode entscheidet anhand der Parameter, an welche private Methode delegiert wird
	* @param String_oder_Array param1
	* @param String_oder_Array param2
	* @access public
	*
	*/
	
	function setContent($param1, $param2="") {
		if(!is_array($param1) && $param2 && !is_array($param2)) {
			$this->setOne($param1, $param2);
		} elseif (is_array($param1) && !$param2){
			$this->setArray($param1);
		} elseif (!is_array($param1) && is_array($param2)) {
			$this->setLoop($param1, $param2);
		} else {
			die("Parameter in der Klasse Vorlage wurden falsch übergeben.");
		}
	}

	/**
	*
	* Aufrufbeispiel:	
	* $vorlage->setOne("TITEL", "Titel der WebSite");
	* @param String suchWort "Der String, der ersetzt wird"
	* @param String substitution "Der String, der eingebunden wird"
	* @access private
	*
	*/
	
	function setOne($suchWort, $substitution) {
		$this->vorlage = str_replace("{".$suchWort."}",
		$substitution,
		$this->vorlage);
	}
	
	/**
	*
	* Aufrufbeispiel:
	* $vorlage->setArray(array("MELDUNG" => $meldung,
	* "NAME" => $_POST['name'],
	* "EMAIL" => $_POST['eMail'],
	* "TEXT" => $_POST['text'],
	* "KOPIE" => $_POST['kopie']));
	* @param mixed $Array enthält Variable/Substitution-Paare
	* @access private
	*/
	
	function setArray($Array) {
		foreach ($Array as $suchWort => $substitution) {
			$this->setOne($suchWort, $substitution);	
		}
	}
		
	/**
	*
	* Aufrufbeispiel:
	* $vorlage->setLoop($nameDerSchleife, array(array("var1" => "konst1",
	* "var2" => "konst2"),
	* array("var1" => "konst3",
	* "var2" => "konst4")));
	* @param String $schleife Bezeichnung der Schleife
	* @param mixed $Array Array von assoziativen Arrays, die jeweils die Schlüssel/Werte enthalten (siehe Aufrufbeispiel)
	* @access private	
	*
	*/
	
	function setLoop($schleife, $Array) {
		$str = explode("<!--anfang:".$schleife."!-->",
		str_replace("<!--ende:".$schleife."!-->",
		"<!--anfang:".$schleife."!-->",
		$this->vorlage));
		$teilStr = "";	
		foreach ($Array as $element) {
			$teilVorlage = new Template($str[1]);
			$teilVorlage->setArray($element);
			$teilStr .= $teilVorlage->vorlage;
		}
		$this->vorlage = $str[0] . $teilStr . $str[2];
	}
	
}
	
?>